home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 November / SGI Freeware 1999 November - Disc 2.iso / dist / fw_IZzip.idb / usr / freeware / src / zip / atari / atari.c.z / atari.c
C/C++ Source or Header  |  1997-09-09  |  2KB  |  127 lines

  1. /*
  2.  * ATARI.C
  3.  *
  4.  * Necessary interface functions, mostly for conversion
  5.  * of path names. (Is this *really* necessary? The C library should
  6.  * do this -- Jean-loup.)
  7.  */
  8. #ifdef ATARI_ST
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <tos.h>
  13. #include <ext.h>
  14.  
  15. #define FNMAX 256
  16. #define OF(sig) sig
  17.  
  18. char *st_fn OF((char *));
  19.  
  20. char *st_fn(s)
  21. char *s;
  22. {
  23. static char tosname [ FNMAX ];
  24. char *t = tosname;
  25.  
  26.   while ( *t=*s++ ) {
  27.     if ( *t == '/' )
  28.       *t = '\\';
  29.     t++;
  30.   }
  31.   
  32.   return(tosname);
  33. }
  34.  
  35. int st_unlink(f)
  36. char *f;
  37. {
  38.   return(unlink(st_fn(f)));
  39. }
  40.  
  41. /* Fake chmod with minimalistic functionality.
  42.  * [ anyway people will be in trouble with the readonly files
  43.  *   produces by this, since 'normal' users don't own the
  44.  *   'tools' to manipulate these. ]
  45.  */
  46. int st_chmod(f, a)
  47. char *f;                /* file path */
  48. int a;                  /* attributes returned by getfileattr() */
  49. /* Give the file f the attributes a, return non-zero on failure */
  50. {
  51.   if ( ! ( a & S_IWRITE ) )
  52.     if (Fattrib(st_fn(f), 1, FA_READONLY) < 0 )
  53.       return(-1);
  54.   return 0;
  55. }
  56.  
  57. /*
  58.  * mktemp is not part of the Turbo C library.
  59.  */ 
  60. char *st_mktemp(s)
  61. char *s;
  62. {
  63. char *t;
  64. long i;
  65.   for(t=s; *t; t++)
  66.     if ( *t == '/' )
  67.       *t = '\\';
  68.   t -= 6;
  69.   i = (unsigned long)s % 1000000L;
  70.   do {
  71.     sprintf(t, "%06ld", i++);
  72.   } while ( Fsfirst(s, 0x21) == 0 );
  73.   return(s);
  74. }
  75.  
  76. FILE *st_fopen(f,m)
  77. char *f;
  78. char *m;
  79. {
  80.   return(fopen(st_fn(f),m));
  81. }
  82.  
  83. int st_open(f,m)
  84. char *f;
  85. int m;
  86. {
  87.   return(open(st_fn(f),m));
  88. }
  89.  
  90. int st_stat(f, b)
  91. char *f;
  92. struct stat *b;
  93. {
  94.   return(stat(st_fn(f),b));
  95. }
  96.  
  97. int st_findfirst(n,d,a)
  98. char *n;
  99. struct ffblk *d;
  100. int a;
  101. {
  102.   return(findfirst( st_fn(n),(struct ffblk *)d,a));
  103. }
  104.  
  105.  
  106. int st_rename(s, d)
  107. char *s, *d;
  108. {
  109. char tosname [ FNMAX ];
  110. char *t = tosname;
  111.  
  112.   while ( *t=*s++ ) {
  113.     if ( *t == '/' )
  114.       *t = '\\';
  115.     t++;
  116.   }
  117.   return(rename(tosname, st_fn(d)));
  118. }  
  119.  
  120. int st_rmdir(d)
  121. char *d;
  122. {
  123.   return(Ddelete(st_fn(d)));
  124. }
  125.  
  126. #endif /* ?ATARI_ST */
  127.